#include <iostream>
#include <unistd.h>
#include <string>
#include <pthread.h>
//#include <thread>
using namespace std;



// void threadrun(){
//     while(true){
//         cout << "I am a new thread for C++" << endl;
//         sleep(1);
//     }
// }

// int main(){
//     // C++11的线程库
//     thread t1(threadrun);

//     t1.join();

//     return 0;
// }




// class Request{
// public:
//     Request(int start, int end, const string &threadname)
//     :_start(start),_end(end),_threadname(threadname)
//     {}
// public:
//     int _start;
//     int _end;
//     string _threadname;
// };

// class Response{
// public:
//     Response(int result, int exitcode)
//     :_result(result),_exitcode(exitcode)
//     {}
// public:
//     int _result;
//     int _exitcode;
// };

// void *sumcount(void *args){
//     Request *rq = static_cast<Request *>(args);
//     Response *rsp = new Response(0, 0);

//     for (int i = rq->_start; i <= rq->_end;i++){
//         rsp->_result += i;
//     }
//     delete rq;
//     pthread_exit(static_cast<void *>(rsp));
// }

// int main(){
//     pthread_t tid;
//     Request *rq = new Request(1, 100, "thread 1");
//     // 主线程创建一个新线程
//     pthread_create(&tid, nullptr, sumcount, rq);

//     // 主线程回收新线程
//     void *retval;
//     pthread_join(tid, &retval);
//     Response *rsp = static_cast<Response *>(retval);
//     cout << "rsp->result: " << rsp->_result << " rsp->exitcode: " << rsp->_exitcode << endl;
//     delete rsp;
//     return 0;
// }





// // show函数方法被多个执行流同时执行 被重入了
// void show(const string &name){
//     cout << name << "say# " << "hello thread" << endl;
// }

// int g_val = 100;
// // 新线程的执行函数
// void *pthreadRoution(void *args){
//     int cnt = 5;
//     while (true)
//     {
//         printf("new thread pid: %d, g_val: %d, &g_val: 0x%p\n", getpid(), g_val, &g_val);
//         // cout << "new thread, pid: " << getpid() << endl;
//         // show("[new thread]");
//         sleep(1);
//         cnt--;
//         if (cnt == 0){
//             break;
//         }
//     }
//     pthread_exit((void *)100);
//     // exit(11);
//     // return (void *)100;
// }

// int main(){
//     pthread_t tid;
//     // 主线程创建一个新线程
//     pthread_create(&tid, nullptr, pthreadRoution, nullptr);

//     sleep(1);
//     pthread_cancel(tid);

//     // sleep(1);
//     // return 0;

//     // 主线程
//     // while(true){
//     //     printf("main thread pid: %d, g_val: %d, &g_val: 0x%p\n", getpid(), g_val, &g_val);
//     //     //cout << "main thread, pid: " << getpid() << endl;
//     //     //show("[main thread]");
//     //     sleep(2);
//     //     g_val++;
//     // }

//     void *retval;
//     pthread_join(tid, &retval);

//     cout << "main thread quit ..., ret: " << (long long int)retval << endl;

//     return 0;
// }
